// 必须对外暴露一个方法,而且得返回一个promise对象
const BASE_URL = 'https://www.uinav.com'

function request ({ url, method = 'GET', isAuth, data = {} }) {
  return new Promise((resolve, reject) => {
    // 默认header是空对象,用户无须登陆态,header可以传空对象
    let header = {}

    // 需要登陆态
    if (isAuth) {
      let token = wx.getStorageSync('token')
      // 如果没有token,跳转login
      if (!token) {
        wx.navigateTo({
          url: '/pages/login/main'
        })
        return reject(new Error('请先登录'))
      }
      // 如果需要登陆态,就传递token,否则就不传
      header.Authorization = token
    }

    // 请求前,开启Loading
    wx.showLoading({
      title: '加载中...',
      mask: true
    })

    wx.request({
      url: BASE_URL + url,
      method,
      // header:header,
      header,
      data,
      success: res => {
        // 解构返回的数据
        let { meta, message } = res.data
        if (meta.status === 200) {
          // 如果meta.status===200,才表示数据是正确
          resolve(message)
        } else {
          wx.showModal({
            content: meta.msg,
            showCancel: false
          })
          reject(meta.msg)
        }
      },
      fail () {
        // 一般是网络错误
        wx.showModal({
          content: '网络错误请重试',
          showCancel: false
        })
        reject(new Error('网络错误请重试'))
      },
      complete () {
        // 请求结束后关闭Loading
        wx.hideLoading()
      }
    })
  })
}

export default request
